package cliente;

import interfaces.InterfazRemota;

import java.io.File;
import java.rmi.Naming;
import java.util.HashSet;
import java.util.List;

import dominio.bean.CodigoPostal;
import dominio.bean.FormularioCompraProductos;
import dominio.bean.Liquidacion;
import dominio.bean.Tarifa;
import dominio.bean.DetalleLiquidacion;

public class ClienteImp {
	private static ClienteImp instancia;
		
	InterfazRemota ir;
	
	private ClienteImp(){
		getStub();
	}
	
	private void getStub(){
		try{
			ir=(InterfazRemota)Naming.lookup("//localhost/Liquidaciones");
			System.out.println("Obtenido el servicio remoto: \n "+ ir.toString() +"\n");
		}catch (Exception e) {
			e.printStackTrace();
		}		
	}
	
	public static ClienteImp getInstancia(){
		if (instancia==null)
			instancia=new ClienteImp();
		return instancia;		
	}
	
	public CodigoPostal obtenerCodigoPostal(String idCodigoPostal, Integer sector) {
		try{
			return ir.recuperarCodigoPostal(idCodigoPostal, sector);
		}catch (Exception e) {
			e.printStackTrace();			
		}		
		return null;
	}
	
	public HashSet<FormularioCompraProductos> procesarPlanillaBase(File planillaBase){
		try{
			return ir.procesarPlanillaBase(planillaBase);
		}catch (Exception e) {
			e.printStackTrace();
			return null;
		}		
	}
	
	public Tarifa obtenerTarifa(Integer idEmpresaTransporte, String codigoPostal, Integer sector){
		try{
			return ir.recuperarTarifa(idEmpresaTransporte, codigoPostal, sector);
		}catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public Integer grabarLiquidacion(Liquidacion liquidacion){
		try{
			return ir.grabarLiquidacion(liquidacion);
		}catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public void grabarDetallesLiquidacion(List<DetalleLiquidacion> detallesLiquidacion){
		try{
			ir.grabarDetallesLiquidacion(detallesLiquidacion);
		}catch (Exception e) {
			e.printStackTrace();			
		}
	}
	
	public void actualizarLiquidacion(Liquidacion liquidacion){
		try{
			ir.actualizarLiquidacion(liquidacion);
		}catch (Exception e) {
			e.printStackTrace();			
		}
	}
	
	public Liquidacion obtenerLiquidacion(Integer idLiquidacion){
		try{
			return ir.obtenerLiquidacion(idLiquidacion);
		}catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public HashSet<DetalleLiquidacion> obtenerDetallesLiquidacion(Integer idLiquidacion){
		try{
			return ir.obtenerDetallesLiquidacion(idLiquidacion);
		}catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
}
